#[test]
fn vec_dedup_test() {
    let mut byte_vec = b"Misssssssissippi".to_vec();
    byte_vec.dedup();
    println!("{:?}", byte_vec);
}

// 保留符合条件的内容，其余的从vec中移除掉
#[test]
fn vec_retain_test() {
    let mut values = vec![23, 5, 18, 33, 6, 9, 20];
    println!("{:?}", values.capacity());
    values.retain(|&v| v >= 20);
    println!("{:?}", values);   // 执行保留操作，移除不符合的内容后，vec的容量并没有发生变化，造成内存浪费
    println!("{:?}", values.capacity());
    values.shrink_to_fit();     // 让vec的容量缩减到刚好能存放当前内容的大小
    println!("{:?}", values.capacity());
}

// pop返回Option类型Some(xxx)或None
#[test]
fn vec_pop(){
    let mut v:Vec<i32> = Vec::with_capacity(10);
    v.push(1);
    v.push(2);
    v.push(3);

    println!("e:{:?}", v.pop());
    println!("v:{:?}", v);
    // e:Some(3)
    // v:[1, 2]
}

#[test]
fn vec_pop2(){
    let mut v:Vec<i32> = Vec::with_capacity(10);
    v.push(1);
    v.push(2);
    v.push(3);

    let mut e = v.pop();
    loop {
        match e {
            Some(n) => {
                println!("{}", n);
                e = v.pop();
            },
            None => {
                println!("None");
                break;
            }
        }
    };
    println!("v:{:?}", v);

}

// remove返回数组具体值，比如下面返回 2
#[test]
fn vec_remove(){
    let mut v = vec![1, 2, 3];
    println!("e:{}", v.remove(1));
    println!("v:{:?}", v);
    // e:2
    // v:[1, 3]
}